package string;

public class StringDemo {
    public static void main(String[] args) {

        String s1 = "123abc";//字面量创建字符串第一次使用时会缓存在常量池中
        String s2 = "123abc";//复用s1对象
        String s3 = "123abc";//依然复用
        System.out.println(s1==s2);
        System.out.println(s2==s3);


        String s4 = new String("123abc");//new则一定创建新的对象,不推荐这样用
        System.out.println(s4==s1);

        s1 = s1+"!";//字符串是不变对象,修改内容会创建新的对象
        System.out.println(s1==s2);//false

        String s = "123";
        String s5 =s+"abc";//这里编译器不会做操作,拼接会创建新的对象
        System.out.println(s5==s2);//false
        System.out.println(s5.toString());

        String s6 = "123"+"abc";//触发预计算特性,直接编译为String s5 = "123abc"; 会复用该对象
        System.out.println(s6==s1);//true

        //equals()
        String s7 = "123abc";
        String s8 = new String("123abc");
        System.out.println(s7==s8);//String是引用类型(存的是地址), ==比较的是地址,所以地址不同,为false
        System.out.println(s7.equals(s8));//equals()判断的是内容,内容相同,为true


    }
}
